﻿using System;
namespace TribesPSO
{
    /// <summary>
    /// This interface allows a user to specify their own hyperspace random number generator
    /// to be used with existing PSO implementations
    /// </summary>
    public interface IHyperspaceRandom:IGaussianRandom
    {
        /// <summary>
        /// Generate a vector based on a gaussian distribution at a specified center with a standard deviation of 1
        /// </summary>
        /// <param name="center"></param>
        /// <returns></returns>
        EuclidianVector NextGaussianVector(EuclidianVector center);

        /// <summary>
        /// Generate a vector based on a gaussian distribution with a specified center and standard deviation
        /// </summary>
        /// <param name="center"></param>
        /// <param name="sigma"></param>
        /// <returns></returns>
        EuclidianVector NextGaussianVector(EuclidianVector center, double sigma);

        /// <summary>
        /// Generates a vector based on a uniform distribution with a specified center and standard deviation
        /// </summary>
        /// <param name="center"></param>
        /// <param name="radius"></param>
        /// <returns></returns>
        EuclidianVector NextUniformVector(EuclidianVector center, double radius);
    }
}
